{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<diskcache.core.Cache at 0x1849d550430>"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pybroker\n",
    "from pybroker import Strategy, StrategyConfig, YFinance\n",
    "from pybroker.ext.data import AKShare\n",
    "pybroker.enable_data_source_cache('my_strategy')#使用数据源缓存来确保在运行回测时只下载一次所需的数据。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 配置选项"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "#StrategyConfig是pybroker.strategy.Strategy类的配置选项\n",
    "# https://www.pybroker.com/en/latest/reference/pybroker.config.html#pybroker.config.StrategyConfig\n",
    "config = StrategyConfig(initial_cash=500_000)# type: ignore #创建一个 StrategyConfig 对象来配置策略。初始资金设为 500,000："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "#设置一个新的 Strategy 类实例，它将用于对我们的交易策略进行回测。\n",
    "'''\n",
    "通过传入以下参数来创建一个 Strategy 类的新实例：\n",
    "数据源：    在这种情况下，我们使用 Yahoo Finance 作为数据源。\n",
    "开始日期：  这是回测的开始日期。\n",
    "结束日期：  这是回测的结束日期。\n",
    "之前创建的配置对象。\n",
    "'''\n",
    "strategy = Strategy(AKShare(), '3/1/2017', '3/1/2022', config)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 定义策略规则\n",
    "规则：\n",
    "\n",
    "如果最后收盘价低于前一根K线的最低价，并且该股票没有未平仓的多头头寸，则购买该股票的股份。\n",
    "\n",
    "将买单的限价设置为比最后收盘价低 0.01 的价格。\n",
    "\n",
    "持有头寸 3 天后以市价平仓。\n",
    "\n",
    "在 AAPL 和 MSFT 上执行这些规则，为每只股票分配最多 25% 的投资组合。\n",
    "\n",
    "为实现这一目标，你将定义一个 buy_low 函数，PyBroker 将在每条数据的每个K线上分别为 AAPL 和 MSFT 调用该函数。每个 K 线对应一天的数据："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "'''\n",
    "buy_low 函数将接收一个包含当前股票代码（AAPL 或 MSFT）数据的 ExecContext （ctx）。\n",
    "ExecContext 将包含当前股票代码最近 K 线之前的所有收盘价。通过 ctx.close[-1] 获取最新的收盘价。\n",
    "'''\n",
    "def buy_low(ctx):\n",
    "    # If shares were already purchased and are currently being held, then return.\n",
    "    # 如果股票已经被购买并且当前正在持有，则返回。\n",
    "    if ctx.long_pos():\n",
    "        return\n",
    "    # If the latest close price is less than the previous day's low price,如果最新的收盘价低于前一天的最低价，\n",
    "    # then place a buy order.那么执行买入订单。\n",
    "    \n",
    "    if ctx.bars >= 2 and ctx.close[-1] < ctx.low[-2]:\n",
    "        # Buy a number of shares that is equal to 25% the portfolio.\n",
    "        ctx.buy_shares = ctx.calc_target_shares(0.25)#购买的股份数量,购买的股份数量将等于投资组合的 25%。\n",
    "        # Set the limit price of the order.\n",
    "        # 订单的限价通过设置。如果满足条件，买单将在下一根 K 线成交。\n",
    "        ctx.buy_limit_price = ctx.close[-1] - 0.01\n",
    "        # Hold the position for 3 bars before liquidating (in this case, 3 days).\n",
    "        # 指定在平仓之前持有头寸的 K 线数。平仓时，股票以市价出售，\n",
    "        ctx.hold_bars = 3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "strategy.add_execution(buy_low, ['000001', '000002'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 添加第二个执行逻辑\n",
    "在同一个 Strategy 实例中，你可以为不同的股票代码使用不同的交易规则。换句话说，你并不局限于对一组股票代码只使用一套交易规则。\n",
    "\n",
    "为了说明这一点，提供了一个名为 short_high 的函数，其中包含一个做空策略的新规则集，这与之前的规则集类似："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "def short_high(ctx):\n",
    "    # If shares were already shorted then return.\n",
    "    if ctx.short_pos():\n",
    "        return\n",
    "    # If the latest close price is more than the previous day's high price,\n",
    "    # then place a sell order.\n",
    "    if ctx.bars >= 2 and ctx.close[-1] > ctx.high[-2]:\n",
    "        # Short 100 shares.\n",
    "        ctx.sell_shares = 100\n",
    "        # Cover the shares after 2 bars (in this case, 2 days).\n",
    "        ctx.hold_bars = 2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "#short_high 中的规则将应用于 000003：\n",
    "strategy.add_execution(short_high, ['000003'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 运行回测"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Backtesting: 2017-03-01 00:00:00 to 2022-03-01 00:00:00\n",
      "\n",
      "Loading bar data...\n",
      "Loaded bar data: 0:00:01 \n",
      "\n",
      "Test split: 2017-03-01 00:00:00 to 2022-03-01 00:00:00\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "  0% (0 of 1217) |                       | Elapsed Time: 0:00:00 ETA:  --:--:--\n",
      "  1% (21 of 1217) |                      | Elapsed Time: 0:00:00 ETA:   0:00:03\n",
      "  6% (81 of 1217) |#                     | Elapsed Time: 0:00:00 ETA:   0:00:01\n",
      " 10% (131 of 1217) |##                   | Elapsed Time: 0:00:00 ETA:   0:00:01\n",
      " 18% (221 of 1217) |###                  | Elapsed Time: 0:00:00 ETA:   0:00:00\n",
      " 22% (271 of 1217) |####                 | Elapsed Time: 0:00:00 ETA:   0:00:00\n",
      " 27% (331 of 1217) |#####                | Elapsed Time: 0:00:00 ETA:   0:00:00\n",
      " 32% (391 of 1217) |######               | Elapsed Time: 0:00:00 ETA:   0:00:00\n",
      " 41% (511 of 1217) |########             | Elapsed Time: 0:00:00 ETA:   0:00:00\n",
      " 46% (561 of 1217) |#########            | Elapsed Time: 0:00:00 ETA:   0:00:00\n",
      " 51% (621 of 1217) |##########           | Elapsed Time: 0:00:00 ETA:   0:00:00\n",
      " 55% (671 of 1217) |###########          | Elapsed Time: 0:00:00 ETA:   0:00:00\n",
      " 60% (731 of 1217) |############         | Elapsed Time: 0:00:00 ETA:   0:00:00\n",
      " 63% (771 of 1217) |#############        | Elapsed Time: 0:00:00 ETA:   0:00:00\n",
      " 66% (811 of 1217) |#############        | Elapsed Time: 0:00:00 ETA:   0:00:00\n",
      " 71% (871 of 1217) |###############      | Elapsed Time: 0:00:00 ETA:   0:00:00\n",
      " 76% (931 of 1217) |################     | Elapsed Time: 0:00:00 ETA:   0:00:00\n",
      " 81% (991 of 1217) |#################    | Elapsed Time: 0:00:00 ETA:   0:00:00\n",
      " 85% (1041 of 1217) |#################   | Elapsed Time: 0:00:01 ETA:   0:00:00\n",
      " 88% (1071 of 1217) |#################   | Elapsed Time: 0:00:01 ETA:   0:00:00\n",
      " 93% (1141 of 1217) |##################  | Elapsed Time: 0:00:01 ETA:   0:00:00\n",
      " 97% (1191 of 1217) |################### | Elapsed Time: 0:00:01 ETA:   0:00:00\n",
      "100% (1217 of 1217) |####################| Elapsed Time: 0:00:01 Time:  0:00:01\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Finished backtest: 0:00:10\n"
     ]
    }
   ],
   "source": [
    "result = strategy.backtest()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x184a59ca4a0>]"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "chart = plt.subplot2grid((3, 2), (0, 0), rowspan=3, colspan=2)\n",
    "chart.plot(result.portfolio.index, result.portfolio['market_value'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th>long_shares</th>\n",
       "      <th>short_shares</th>\n",
       "      <th>close</th>\n",
       "      <th>equity</th>\n",
       "      <th>market_value</th>\n",
       "      <th>margin</th>\n",
       "      <th>unrealized_pnl</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>symbol</th>\n",
       "      <th>date</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>000002</th>\n",
       "      <th>2017-03-03</th>\n",
       "      <td>6145</td>\n",
       "      <td>0</td>\n",
       "      <td>20.20</td>\n",
       "      <td>124129.00</td>\n",
       "      <td>124129.00</td>\n",
       "      <td>0.0</td>\n",
       "      <td>-245.80</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>000001</th>\n",
       "      <th>2017-03-03</th>\n",
       "      <td>13255</td>\n",
       "      <td>0</td>\n",
       "      <td>9.40</td>\n",
       "      <td>124597.00</td>\n",
       "      <td>124597.00</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>000002</th>\n",
       "      <th>2017-03-06</th>\n",
       "      <td>6145</td>\n",
       "      <td>0</td>\n",
       "      <td>20.22</td>\n",
       "      <td>124251.90</td>\n",
       "      <td>124251.90</td>\n",
       "      <td>0.0</td>\n",
       "      <td>-122.90</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>000001</th>\n",
       "      <th>2017-03-06</th>\n",
       "      <td>13255</td>\n",
       "      <td>0</td>\n",
       "      <td>9.45</td>\n",
       "      <td>125259.75</td>\n",
       "      <td>125259.75</td>\n",
       "      <td>0.0</td>\n",
       "      <td>662.75</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"3\" valign=\"top\">000002</th>\n",
       "      <th>2017-03-07</th>\n",
       "      <td>6145</td>\n",
       "      <td>0</td>\n",
       "      <td>20.26</td>\n",
       "      <td>124497.70</td>\n",
       "      <td>124497.70</td>\n",
       "      <td>0.0</td>\n",
       "      <td>122.90</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2022-02-24</th>\n",
       "      <td>5294</td>\n",
       "      <td>0</td>\n",
       "      <td>19.84</td>\n",
       "      <td>105032.96</td>\n",
       "      <td>105032.96</td>\n",
       "      <td>0.0</td>\n",
       "      <td>-794.10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>000001</th>\n",
       "      <th>2022-02-24</th>\n",
       "      <td>6607</td>\n",
       "      <td>0</td>\n",
       "      <td>15.91</td>\n",
       "      <td>105117.37</td>\n",
       "      <td>105117.37</td>\n",
       "      <td>0.0</td>\n",
       "      <td>-1717.82</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>000002</th>\n",
       "      <th>2022-02-25</th>\n",
       "      <td>5294</td>\n",
       "      <td>0</td>\n",
       "      <td>19.53</td>\n",
       "      <td>103391.82</td>\n",
       "      <td>103391.82</td>\n",
       "      <td>0.0</td>\n",
       "      <td>-2435.24</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>000001</th>\n",
       "      <th>2022-02-25</th>\n",
       "      <td>6607</td>\n",
       "      <td>0</td>\n",
       "      <td>15.90</td>\n",
       "      <td>105051.30</td>\n",
       "      <td>105051.30</td>\n",
       "      <td>0.0</td>\n",
       "      <td>-1783.89</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>000002</th>\n",
       "      <th>2022-02-28</th>\n",
       "      <td>5294</td>\n",
       "      <td>0</td>\n",
       "      <td>19.20</td>\n",
       "      <td>101644.80</td>\n",
       "      <td>101644.80</td>\n",
       "      <td>0.0</td>\n",
       "      <td>-4182.26</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>636 rows × 7 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                   long_shares  short_shares  close     equity  market_value  \\\n",
       "symbol date                                                                    \n",
       "000002 2017-03-03         6145             0  20.20  124129.00     124129.00   \n",
       "000001 2017-03-03        13255             0   9.40  124597.00     124597.00   \n",
       "000002 2017-03-06         6145             0  20.22  124251.90     124251.90   \n",
       "000001 2017-03-06        13255             0   9.45  125259.75     125259.75   \n",
       "000002 2017-03-07         6145             0  20.26  124497.70     124497.70   \n",
       "...                        ...           ...    ...        ...           ...   \n",
       "       2022-02-24         5294             0  19.84  105032.96     105032.96   \n",
       "000001 2022-02-24         6607             0  15.91  105117.37     105117.37   \n",
       "000002 2022-02-25         5294             0  19.53  103391.82     103391.82   \n",
       "000001 2022-02-25         6607             0  15.90  105051.30     105051.30   \n",
       "000002 2022-02-28         5294             0  19.20  101644.80     101644.80   \n",
       "\n",
       "                   margin  unrealized_pnl  \n",
       "symbol date                                \n",
       "000002 2017-03-03     0.0         -245.80  \n",
       "000001 2017-03-03     0.0            0.00  \n",
       "000002 2017-03-06     0.0         -122.90  \n",
       "000001 2017-03-06     0.0          662.75  \n",
       "000002 2017-03-07     0.0          122.90  \n",
       "...                   ...             ...  \n",
       "       2022-02-24     0.0         -794.10  \n",
       "000001 2022-02-24     0.0        -1717.82  \n",
       "000002 2022-02-25     0.0        -2435.24  \n",
       "000001 2022-02-25     0.0        -1783.89  \n",
       "000002 2022-02-28     0.0        -4182.26  \n",
       "\n",
       "[636 rows x 7 columns]"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#访问每个持有头寸的每日余额、每次进出场的交易以及下达的所有订单：\n",
    "result.positions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>type</th>\n",
       "      <th>symbol</th>\n",
       "      <th>entry_date</th>\n",
       "      <th>exit_date</th>\n",
       "      <th>entry</th>\n",
       "      <th>exit</th>\n",
       "      <th>shares</th>\n",
       "      <th>pnl</th>\n",
       "      <th>return_pct</th>\n",
       "      <th>agg_pnl</th>\n",
       "      <th>bars</th>\n",
       "      <th>pnl_per_bar</th>\n",
       "      <th>stop</th>\n",
       "      <th>mae</th>\n",
       "      <th>mfe</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>id</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>long</td>\n",
       "      <td>000001</td>\n",
       "      <td>2017-03-03</td>\n",
       "      <td>2017-03-08</td>\n",
       "      <td>9.40</td>\n",
       "      <td>9.43</td>\n",
       "      <td>13255</td>\n",
       "      <td>397.65</td>\n",
       "      <td>0.32</td>\n",
       "      <td>397.65</td>\n",
       "      <td>3</td>\n",
       "      <td>132.55</td>\n",
       "      <td>bar</td>\n",
       "      <td>-0.04</td>\n",
       "      <td>0.06</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>long</td>\n",
       "      <td>000002</td>\n",
       "      <td>2017-03-03</td>\n",
       "      <td>2017-03-08</td>\n",
       "      <td>20.24</td>\n",
       "      <td>20.56</td>\n",
       "      <td>6145</td>\n",
       "      <td>1966.40</td>\n",
       "      <td>1.58</td>\n",
       "      <td>2364.05</td>\n",
       "      <td>3</td>\n",
       "      <td>655.47</td>\n",
       "      <td>bar</td>\n",
       "      <td>-0.12</td>\n",
       "      <td>0.32</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>long</td>\n",
       "      <td>000001</td>\n",
       "      <td>2017-03-20</td>\n",
       "      <td>2017-03-23</td>\n",
       "      <td>9.26</td>\n",
       "      <td>9.20</td>\n",
       "      <td>13489</td>\n",
       "      <td>-809.34</td>\n",
       "      <td>-0.65</td>\n",
       "      <td>1554.71</td>\n",
       "      <td>3</td>\n",
       "      <td>-269.78</td>\n",
       "      <td>bar</td>\n",
       "      <td>-0.12</td>\n",
       "      <td>0.05</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>long</td>\n",
       "      <td>000002</td>\n",
       "      <td>2017-03-21</td>\n",
       "      <td>2017-03-24</td>\n",
       "      <td>21.08</td>\n",
       "      <td>21.50</td>\n",
       "      <td>5942</td>\n",
       "      <td>2495.64</td>\n",
       "      <td>1.99</td>\n",
       "      <td>4050.35</td>\n",
       "      <td>3</td>\n",
       "      <td>831.88</td>\n",
       "      <td>bar</td>\n",
       "      <td>-0.26</td>\n",
       "      <td>0.83</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>long</td>\n",
       "      <td>000002</td>\n",
       "      <td>2017-03-30</td>\n",
       "      <td>2017-04-06</td>\n",
       "      <td>20.77</td>\n",
       "      <td>20.72</td>\n",
       "      <td>5997</td>\n",
       "      <td>-299.85</td>\n",
       "      <td>-0.24</td>\n",
       "      <td>3750.50</td>\n",
       "      <td>3</td>\n",
       "      <td>-99.95</td>\n",
       "      <td>bar</td>\n",
       "      <td>-0.29</td>\n",
       "      <td>0.29</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>208</th>\n",
       "      <td>long</td>\n",
       "      <td>000001</td>\n",
       "      <td>2022-01-25</td>\n",
       "      <td>2022-01-28</td>\n",
       "      <td>16.94</td>\n",
       "      <td>16.13</td>\n",
       "      <td>6370</td>\n",
       "      <td>-5159.70</td>\n",
       "      <td>-4.78</td>\n",
       "      <td>-72564.41</td>\n",
       "      <td>3</td>\n",
       "      <td>-1719.90</td>\n",
       "      <td>bar</td>\n",
       "      <td>-0.81</td>\n",
       "      <td>0.16</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>209</th>\n",
       "      <td>long</td>\n",
       "      <td>000001</td>\n",
       "      <td>2022-02-15</td>\n",
       "      <td>2022-02-18</td>\n",
       "      <td>16.39</td>\n",
       "      <td>16.54</td>\n",
       "      <td>6445</td>\n",
       "      <td>966.75</td>\n",
       "      <td>0.92</td>\n",
       "      <td>-71597.66</td>\n",
       "      <td>3</td>\n",
       "      <td>322.25</td>\n",
       "      <td>bar</td>\n",
       "      <td>-0.29</td>\n",
       "      <td>0.28</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>210</th>\n",
       "      <td>long</td>\n",
       "      <td>000002</td>\n",
       "      <td>2022-02-15</td>\n",
       "      <td>2022-02-18</td>\n",
       "      <td>20.02</td>\n",
       "      <td>20.12</td>\n",
       "      <td>5279</td>\n",
       "      <td>527.90</td>\n",
       "      <td>0.50</td>\n",
       "      <td>-71069.76</td>\n",
       "      <td>3</td>\n",
       "      <td>175.97</td>\n",
       "      <td>bar</td>\n",
       "      <td>-0.46</td>\n",
       "      <td>0.30</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>211</th>\n",
       "      <td>long</td>\n",
       "      <td>000001</td>\n",
       "      <td>2022-02-23</td>\n",
       "      <td>2022-02-28</td>\n",
       "      <td>16.17</td>\n",
       "      <td>15.77</td>\n",
       "      <td>6607</td>\n",
       "      <td>-2642.80</td>\n",
       "      <td>-2.47</td>\n",
       "      <td>-73712.56</td>\n",
       "      <td>3</td>\n",
       "      <td>-880.93</td>\n",
       "      <td>bar</td>\n",
       "      <td>-0.40</td>\n",
       "      <td>0.14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>212</th>\n",
       "      <td>long</td>\n",
       "      <td>000002</td>\n",
       "      <td>2022-02-24</td>\n",
       "      <td>2022-03-01</td>\n",
       "      <td>19.99</td>\n",
       "      <td>19.26</td>\n",
       "      <td>5294</td>\n",
       "      <td>-3864.62</td>\n",
       "      <td>-3.65</td>\n",
       "      <td>-77577.18</td>\n",
       "      <td>3</td>\n",
       "      <td>-1288.21</td>\n",
       "      <td>bar</td>\n",
       "      <td>-1.00</td>\n",
       "      <td>0.39</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>212 rows × 15 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     type  symbol entry_date  exit_date  entry   exit  shares      pnl  \\\n",
       "id                                                                       \n",
       "1    long  000001 2017-03-03 2017-03-08   9.40   9.43   13255   397.65   \n",
       "2    long  000002 2017-03-03 2017-03-08  20.24  20.56    6145  1966.40   \n",
       "3    long  000001 2017-03-20 2017-03-23   9.26   9.20   13489  -809.34   \n",
       "4    long  000002 2017-03-21 2017-03-24  21.08  21.50    5942  2495.64   \n",
       "5    long  000002 2017-03-30 2017-04-06  20.77  20.72    5997  -299.85   \n",
       "..    ...     ...        ...        ...    ...    ...     ...      ...   \n",
       "208  long  000001 2022-01-25 2022-01-28  16.94  16.13    6370 -5159.70   \n",
       "209  long  000001 2022-02-15 2022-02-18  16.39  16.54    6445   966.75   \n",
       "210  long  000002 2022-02-15 2022-02-18  20.02  20.12    5279   527.90   \n",
       "211  long  000001 2022-02-23 2022-02-28  16.17  15.77    6607 -2642.80   \n",
       "212  long  000002 2022-02-24 2022-03-01  19.99  19.26    5294 -3864.62   \n",
       "\n",
       "     return_pct   agg_pnl  bars  pnl_per_bar stop   mae   mfe  \n",
       "id                                                             \n",
       "1          0.32    397.65     3       132.55  bar -0.04  0.06  \n",
       "2          1.58   2364.05     3       655.47  bar -0.12  0.32  \n",
       "3         -0.65   1554.71     3      -269.78  bar -0.12  0.05  \n",
       "4          1.99   4050.35     3       831.88  bar -0.26  0.83  \n",
       "5         -0.24   3750.50     3       -99.95  bar -0.29  0.29  \n",
       "..          ...       ...   ...          ...  ...   ...   ...  \n",
       "208       -4.78 -72564.41     3     -1719.90  bar -0.81  0.16  \n",
       "209        0.92 -71597.66     3       322.25  bar -0.29  0.28  \n",
       "210        0.50 -71069.76     3       175.97  bar -0.46  0.30  \n",
       "211       -2.47 -73712.56     3      -880.93  bar -0.40  0.14  \n",
       "212       -3.65 -77577.18     3     -1288.21  bar -1.00  0.39  \n",
       "\n",
       "[212 rows x 15 columns]"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "result.trades"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>type</th>\n",
       "      <th>symbol</th>\n",
       "      <th>date</th>\n",
       "      <th>shares</th>\n",
       "      <th>limit_price</th>\n",
       "      <th>fill_price</th>\n",
       "      <th>fees</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>id</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>buy</td>\n",
       "      <td>000001</td>\n",
       "      <td>2017-03-03</td>\n",
       "      <td>13255</td>\n",
       "      <td>9.42</td>\n",
       "      <td>9.40</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>buy</td>\n",
       "      <td>000002</td>\n",
       "      <td>2017-03-03</td>\n",
       "      <td>6145</td>\n",
       "      <td>20.33</td>\n",
       "      <td>20.24</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>sell</td>\n",
       "      <td>000001</td>\n",
       "      <td>2017-03-08</td>\n",
       "      <td>13255</td>\n",
       "      <td>NaN</td>\n",
       "      <td>9.43</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>sell</td>\n",
       "      <td>000002</td>\n",
       "      <td>2017-03-08</td>\n",
       "      <td>6145</td>\n",
       "      <td>NaN</td>\n",
       "      <td>20.56</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>buy</td>\n",
       "      <td>000001</td>\n",
       "      <td>2017-03-20</td>\n",
       "      <td>13489</td>\n",
       "      <td>9.30</td>\n",
       "      <td>9.26</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>420</th>\n",
       "      <td>sell</td>\n",
       "      <td>000002</td>\n",
       "      <td>2022-02-18</td>\n",
       "      <td>5279</td>\n",
       "      <td>NaN</td>\n",
       "      <td>20.12</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>421</th>\n",
       "      <td>buy</td>\n",
       "      <td>000001</td>\n",
       "      <td>2022-02-23</td>\n",
       "      <td>6607</td>\n",
       "      <td>16.22</td>\n",
       "      <td>16.17</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>422</th>\n",
       "      <td>buy</td>\n",
       "      <td>000002</td>\n",
       "      <td>2022-02-24</td>\n",
       "      <td>5294</td>\n",
       "      <td>20.25</td>\n",
       "      <td>19.99</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>423</th>\n",
       "      <td>sell</td>\n",
       "      <td>000001</td>\n",
       "      <td>2022-02-28</td>\n",
       "      <td>6607</td>\n",
       "      <td>NaN</td>\n",
       "      <td>15.77</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>424</th>\n",
       "      <td>sell</td>\n",
       "      <td>000002</td>\n",
       "      <td>2022-03-01</td>\n",
       "      <td>5294</td>\n",
       "      <td>NaN</td>\n",
       "      <td>19.26</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>424 rows × 7 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     type  symbol       date  shares  limit_price  fill_price  fees\n",
       "id                                                                 \n",
       "1     buy  000001 2017-03-03   13255         9.42        9.40   0.0\n",
       "2     buy  000002 2017-03-03    6145        20.33       20.24   0.0\n",
       "3    sell  000001 2017-03-08   13255          NaN        9.43   0.0\n",
       "4    sell  000002 2017-03-08    6145          NaN       20.56   0.0\n",
       "5     buy  000001 2017-03-20   13489         9.30        9.26   0.0\n",
       "..    ...     ...        ...     ...          ...         ...   ...\n",
       "420  sell  000002 2022-02-18    5279          NaN       20.12   0.0\n",
       "421   buy  000001 2022-02-23    6607        16.22       16.17   0.0\n",
       "422   buy  000002 2022-02-24    5294        20.25       19.99   0.0\n",
       "423  sell  000001 2022-02-28    6607          NaN       15.77   0.0\n",
       "424  sell  000002 2022-03-01    5294          NaN       19.26   0.0\n",
       "\n",
       "[424 rows x 7 columns]"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "result.orders"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>name</th>\n",
       "      <th>value</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>trade_count</td>\n",
       "      <td>2.120000e+02</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>initial_market_value</td>\n",
       "      <td>5.000000e+05</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>end_market_value</td>\n",
       "      <td>4.224228e+05</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>total_pnl</td>\n",
       "      <td>-7.757718e+04</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>unrealized_pnl</td>\n",
       "      <td>1.455192e-11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>total_return_pct</td>\n",
       "      <td>-1.551544e+01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>total_profit</td>\n",
       "      <td>2.528066e+05</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>total_loss</td>\n",
       "      <td>-3.303838e+05</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>total_fees</td>\n",
       "      <td>0.000000e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>max_drawdown</td>\n",
       "      <td>-1.007738e+05</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>max_drawdown_pct</td>\n",
       "      <td>-1.945770e+01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>win_rate</td>\n",
       "      <td>4.428571e+01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>loss_rate</td>\n",
       "      <td>5.571429e+01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>winning_trades</td>\n",
       "      <td>9.300000e+01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>losing_trades</td>\n",
       "      <td>1.170000e+02</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>avg_pnl</td>\n",
       "      <td>-3.659301e+02</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>avg_return_pct</td>\n",
       "      <td>-3.086321e-01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>avg_trade_bars</td>\n",
       "      <td>3.000000e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>avg_profit</td>\n",
       "      <td>2.718351e+03</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>avg_profit_pct</td>\n",
       "      <td>2.368172e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>avg_winning_trade_bars</td>\n",
       "      <td>3.000000e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>avg_loss</td>\n",
       "      <td>-2.823793e+03</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>avg_loss_pct</td>\n",
       "      <td>-2.441624e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>avg_losing_trade_bars</td>\n",
       "      <td>3.000000e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>largest_win</td>\n",
       "      <td>1.476370e+04</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25</th>\n",
       "      <td>largest_win_pct</td>\n",
       "      <td>1.302000e+01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>largest_win_bars</td>\n",
       "      <td>3.000000e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>largest_loss</td>\n",
       "      <td>-1.438240e+04</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>largest_loss_pct</td>\n",
       "      <td>-1.262000e+01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29</th>\n",
       "      <td>largest_loss_bars</td>\n",
       "      <td>3.000000e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>30</th>\n",
       "      <td>max_wins</td>\n",
       "      <td>6.000000e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>31</th>\n",
       "      <td>max_losses</td>\n",
       "      <td>8.000000e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>32</th>\n",
       "      <td>sharpe</td>\n",
       "      <td>-3.447371e-02</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>33</th>\n",
       "      <td>sortino</td>\n",
       "      <td>-2.931666e-02</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34</th>\n",
       "      <td>profit_factor</td>\n",
       "      <td>8.638968e-01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>35</th>\n",
       "      <td>ulcer_index</td>\n",
       "      <td>1.380084e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>36</th>\n",
       "      <td>upi</td>\n",
       "      <td>-9.481397e-03</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>37</th>\n",
       "      <td>equity_r2</td>\n",
       "      <td>7.403516e-01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>38</th>\n",
       "      <td>std_error</td>\n",
       "      <td>2.443524e+04</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                      name         value\n",
       "0              trade_count  2.120000e+02\n",
       "1     initial_market_value  5.000000e+05\n",
       "2         end_market_value  4.224228e+05\n",
       "3                total_pnl -7.757718e+04\n",
       "4           unrealized_pnl  1.455192e-11\n",
       "5         total_return_pct -1.551544e+01\n",
       "6             total_profit  2.528066e+05\n",
       "7               total_loss -3.303838e+05\n",
       "8               total_fees  0.000000e+00\n",
       "9             max_drawdown -1.007738e+05\n",
       "10        max_drawdown_pct -1.945770e+01\n",
       "11                win_rate  4.428571e+01\n",
       "12               loss_rate  5.571429e+01\n",
       "13          winning_trades  9.300000e+01\n",
       "14           losing_trades  1.170000e+02\n",
       "15                 avg_pnl -3.659301e+02\n",
       "16          avg_return_pct -3.086321e-01\n",
       "17          avg_trade_bars  3.000000e+00\n",
       "18              avg_profit  2.718351e+03\n",
       "19          avg_profit_pct  2.368172e+00\n",
       "20  avg_winning_trade_bars  3.000000e+00\n",
       "21                avg_loss -2.823793e+03\n",
       "22            avg_loss_pct -2.441624e+00\n",
       "23   avg_losing_trade_bars  3.000000e+00\n",
       "24             largest_win  1.476370e+04\n",
       "25         largest_win_pct  1.302000e+01\n",
       "26        largest_win_bars  3.000000e+00\n",
       "27            largest_loss -1.438240e+04\n",
       "28        largest_loss_pct -1.262000e+01\n",
       "29       largest_loss_bars  3.000000e+00\n",
       "30                max_wins  6.000000e+00\n",
       "31              max_losses  8.000000e+00\n",
       "32                  sharpe -3.447371e-02\n",
       "33                 sortino -2.931666e-02\n",
       "34           profit_factor  8.638968e-01\n",
       "35             ulcer_index  1.380084e+00\n",
       "36                     upi -9.481397e-03\n",
       "37               equity_r2  7.403516e-01\n",
       "38               std_error  2.443524e+04"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#result.metrics_df 包含一个使用回测收益率计算得出的指标 DataFrame。\n",
    "# https://www.pybroker.com/en/latest/reference/pybroker.eval.html#pybroker.eval.EvalMetrics\n",
    "result.metrics_df"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 筛选回测数据\n",
    "你可以筛选用于回测的数据，仅包括特定的 K 线。例如，你可以通过筛选仅包含周一的数据来限制策略仅在周一交易：\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Backtesting: 2017-03-01 00:00:00 to 2022-03-01 00:00:00\n",
      "\n",
      "Loading bar data...\n",
      "Loaded bar data: 0:00:00 \n",
      "\n",
      "Test split: 2017-03-06 00:00:00 to 2022-02-28 00:00:00\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "c:\\ProgramData\\anaconda3\\lib\\site-packages\\pybroker\\data.py:244: FutureWarning: The behavior of DataFrame concatenation with empty or all-NA entries is deprecated. In a future version, this will no longer exclude empty or all-NA columns when determining the result dtypes. To retain the old behavior, exclude the relevant entries before the concat operation.\n",
      "  df = pd.concat((cached_df, df))\n",
      "  0% (0 of 236) |                        | Elapsed Time: 0:00:00 ETA:  --:--:--\n",
      "  4% (11 of 236) |#                      | Elapsed Time: 0:00:00 ETA:   0:00:01\n",
      " 25% (61 of 236) |#####                  | Elapsed Time: 0:00:00 ETA:   0:00:00\n",
      " 51% (121 of 236) |###########           | Elapsed Time: 0:00:00 ETA:   0:00:00\n",
      " 68% (161 of 236) |###############       | Elapsed Time: 0:00:00 ETA:   0:00:00\n",
      " 93% (221 of 236) |####################  | Elapsed Time: 0:00:00 ETA:   0:00:00\n",
      "100% (236 of 236) |######################| Elapsed Time: 0:00:00 Time:  0:00:00\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Finished backtest: 0:00:01\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>type</th>\n",
       "      <th>symbol</th>\n",
       "      <th>date</th>\n",
       "      <th>shares</th>\n",
       "      <th>limit_price</th>\n",
       "      <th>fill_price</th>\n",
       "      <th>fees</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>id</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>buy</td>\n",
       "      <td>000001</td>\n",
       "      <td>2017-03-27</td>\n",
       "      <td>13513</td>\n",
       "      <td>9.24</td>\n",
       "      <td>9.14</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>buy</td>\n",
       "      <td>000002</td>\n",
       "      <td>2017-04-17</td>\n",
       "      <td>6074</td>\n",
       "      <td>20.59</td>\n",
       "      <td>20.51</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>sell</td>\n",
       "      <td>000001</td>\n",
       "      <td>2017-04-24</td>\n",
       "      <td>13513</td>\n",
       "      <td>NaN</td>\n",
       "      <td>8.94</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>buy</td>\n",
       "      <td>000001</td>\n",
       "      <td>2017-05-08</td>\n",
       "      <td>13908</td>\n",
       "      <td>8.92</td>\n",
       "      <td>8.58</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>sell</td>\n",
       "      <td>000002</td>\n",
       "      <td>2017-05-15</td>\n",
       "      <td>6074</td>\n",
       "      <td>NaN</td>\n",
       "      <td>19.37</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>83</th>\n",
       "      <td>buy</td>\n",
       "      <td>000001</td>\n",
       "      <td>2021-11-08</td>\n",
       "      <td>7245</td>\n",
       "      <td>19.38</td>\n",
       "      <td>17.58</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>84</th>\n",
       "      <td>sell</td>\n",
       "      <td>000001</td>\n",
       "      <td>2021-11-29</td>\n",
       "      <td>7245</td>\n",
       "      <td>NaN</td>\n",
       "      <td>17.46</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>85</th>\n",
       "      <td>buy</td>\n",
       "      <td>000001</td>\n",
       "      <td>2021-12-27</td>\n",
       "      <td>8005</td>\n",
       "      <td>17.51</td>\n",
       "      <td>17.26</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>86</th>\n",
       "      <td>sell</td>\n",
       "      <td>000001</td>\n",
       "      <td>2022-01-24</td>\n",
       "      <td>8005</td>\n",
       "      <td>NaN</td>\n",
       "      <td>17.18</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>87</th>\n",
       "      <td>buy</td>\n",
       "      <td>000002</td>\n",
       "      <td>2022-02-14</td>\n",
       "      <td>6700</td>\n",
       "      <td>20.90</td>\n",
       "      <td>20.58</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>87 rows × 7 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "    type  symbol       date  shares  limit_price  fill_price  fees\n",
       "id                                                                \n",
       "1    buy  000001 2017-03-27   13513         9.24        9.14   0.0\n",
       "2    buy  000002 2017-04-17    6074        20.59       20.51   0.0\n",
       "3   sell  000001 2017-04-24   13513          NaN        8.94   0.0\n",
       "4    buy  000001 2017-05-08   13908         8.92        8.58   0.0\n",
       "5   sell  000002 2017-05-15    6074          NaN       19.37   0.0\n",
       "..   ...     ...        ...     ...          ...         ...   ...\n",
       "83   buy  000001 2021-11-08    7245        19.38       17.58   0.0\n",
       "84  sell  000001 2021-11-29    7245          NaN       17.46   0.0\n",
       "85   buy  000001 2021-12-27    8005        17.51       17.26   0.0\n",
       "86  sell  000001 2022-01-24    8005          NaN       17.18   0.0\n",
       "87   buy  000002 2022-02-14    6700        20.90       20.58   0.0\n",
       "\n",
       "[87 rows x 7 columns]"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "result = strategy.backtest(days='mon')\n",
    "result.orders"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "base",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
